package com.loto.io.f.nio.buffer;

import java.nio.ByteBuffer;

/**
 * 向缓冲区中添加数据
 */
public class PutBuffer {
    public static void main(String[] args) {
        // 1.创建一个缓冲区
        ByteBuffer allocate = ByteBuffer.allocate(10);
        System.out.println(allocate.position());  // 0 获取当前索引所在位置
        System.out.println(allocate.limit());     // 10 最多能操作到哪个索引位置
        System.out.println(allocate.capacity());  // 10 返回缓冲区总长度
        System.out.println(allocate.remaining()); // 10 还有多少个可以操作的个数

        System.out.println("----------------");

        // 修改当前索引所在位置
        //allocate.position(1);

        // 修改最多能操作到哪个索引的位置
        //allocate.limit(9);

        //System.out.println(allocate.position());  // 1 获取当前索引所在位置
        //System.out.println(allocate.limit());     // 9 最多能操作到哪个索引位置
        //System.out.println(allocate.capacity());  // 10 返回缓冲区总长度
        //System.out.println(allocate.remaining()); // 8 还有多少个可以操作的个数

        // 向缓冲区中添加一个字节
        allocate.put((byte) 97);
        System.out.println(allocate.position());  // 1 获取当前索引所在位置
        System.out.println(allocate.limit());     // 10 最多能操作到哪个索引位置
        System.out.println(allocate.capacity());  // 10 返回缓冲区总长度
        System.out.println(allocate.remaining()); // 9 还有多少个可以操作的个数
        System.out.println("----------------");

        // 向缓冲区中添加一个数组
        allocate.put("abc".getBytes());
        System.out.println(allocate.position());  // 4 获取当前索引所在位置
        System.out.println(allocate.limit());     // 10 最多能操作到哪个索引位置
        System.out.println(allocate.capacity());  // 10 返回缓冲区总长度
        System.out.println(allocate.remaining()); // 6 还有多少个可以操作的个数
        System.out.println("----------------");

        // 添加一个数组
        allocate.put("123456".getBytes());
        System.out.println(allocate.position());     // 10 获取当前索引所在位置
        System.out.println(allocate.limit());        // 10 最多能操作到哪个索引位置
        System.out.println(allocate.capacity());     // 10 返回缓冲区总长度
        System.out.println(allocate.remaining());    // 0 还有多少个可以操作的个数
        System.out.println(allocate.hasRemaining()); // false 是否还能操作
        System.out.println("----------------");

        // 如果缓冲区满了，可以调整position位置，就可以重复写，会覆盖之前存入索引位置的值
        allocate.position(0);
        allocate.put("123456".getBytes());
        System.out.println(allocate.position());     // 6 获取当前索引所在位置
        System.out.println(allocate.limit());        // 10 最多能操作到哪个索引位置
        System.out.println(allocate.capacity());     // 10 返回缓冲区总长度
        System.out.println(allocate.remaining());    // 4 还有多少个可以操作的个数
        System.out.println(allocate.hasRemaining()); // true 是否还能操作
    }
}
